// --- Copyright (c) 2010 Steven Hartgers ---
// Copyright (C) 2010 Steven Hartgers All rights are reserved.
// Author contact: fiinix00/at\gmail.com
// ------------------------------------------------------------------------
// This program is free software: you can redistribute it and/or modify 
// it under the terms of the GNU General Public License as published by 
// the Free Software Foundation, either version 3 of the License, or 
// (at your option) any later version. 
//  
// This program is distributed in the hope that it will be useful, 
// but WITHOUT ANY WARRANTY; without even the implied warranty of 
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
// GNU General Public License for more detail
//  
// You should have received a copy of the GNU General Public License 
// along with this program.  If not, see <http://www.gnu.org/licenses/>.
// ------------------------------------------------------------------------
// COPYRIGHT NOTICE: This copyright notice may NOT be removed, obscured or modified 
// without written consent from the author.
// --- End copyright notice --- 


using System;
using System.IO;
using System.Xml;
//using System.Windows.Forms;


namespace LiteLib
{
    //public class Settings
    //{
    //    public string this[string name]
    //    {
    //        get
    //        {
    //            try
    //            {
    //                return (string)Application.UserAppDataRegistry.GetValue(name);
    //            }
    //            catch(Exception)
    //            {
    //                return null;
    //            }
    //        }
    //        set
    //        {
    //            try
    //            {
    //                Application.UserAppDataRegistry.SetValue(name, value);
    //            }
    //            catch(Exception)
    //            {
    //            }
    //        }
    //    }
    //    // get functions
    //    public static string GetValue(string name)
    //    {
    //        return (string)Application.UserAppDataRegistry.GetValue(name);
    //    }
    //    public static string GetValue(string name, string defaultValue)
    //    {
    //        return (string)Application.UserAppDataRegistry.GetValue(name, defaultValue);
    //    }
    //    public static int GetValue(string name, int defaultValue)
    //    {
    //        string str = GetValue(name, defaultValue.ToString());
    //        if(str != "")
    //            return int.Parse(str);
    //        return -1;
    //    }
    //    public static bool GetValue(string name, bool defaultValue)
    //    {
    //        return GetValue(name, defaultValue.ToString()).ToLower() == "true";
    //    }
    //    // set functions
    //    public static void SetValue(string name, string value)
    //    {
    //        Application.UserAppDataRegistry.SetValue(name, value);
    //    }
    //    public static void SetValue(string name, bool value)
    //    {
    //        SetValue(name, value.ToString());
    //    }

    //    public static void SetValue(Form form)
    //    {
    //        Control ctrl = null;
    //        while((ctrl = form.GetNextControl(ctrl, true)) != null)
    //            Settings.SetValue(ctrl);
    //    }
    //    public static void SetValue(Control ctrl)
    //    {
    //        string Name = ctrl.FindForm().Name+'-'+ctrl.Name;
    //        if(ctrl.Tag != null && ctrl.Tag.ToString().Trim().Length > 0)
    //            switch(ctrl.GetType().Name)
    //            {
    //                case "TextBox":
    //                    Settings.SetValue((string)ctrl.Tag, ctrl.Text);
    //                    break;
    //                case "CheckBox":
    //                    CheckBox check = (CheckBox)ctrl;
    //                    Settings.SetValue((string)ctrl.Tag, check.Checked);
    //                    break;
    //                case "RadioButton":
    //                    RadioButton radio = (RadioButton)ctrl;
    //                    Settings.SetValue((string)ctrl.Tag, radio.Checked);
    //                    break;
    //                case "NumericUpDown":
    //                    NumericUpDown numeric = (NumericUpDown)ctrl;
    //                    Settings.SetValue((string)ctrl.Tag, numeric.Value.ToString());
    //                    break;
    //                case "TabControl":
    //                    TabControl tab = (TabControl)ctrl;
    //                    Settings.SetValue((string)ctrl.Tag, tab.SelectedIndex.ToString());
    //                    break;
    //                case "ComboBox":
    //                    ComboBox combo = (ComboBox)ctrl;
    //                    try
    //                    {
    //                        string fileName = null;
    //                        XmlDocument doc = null;
    //                        XmlNode element = GetCtrlNode(ctrl, ref fileName, ref doc);
    //                        element.RemoveAll();
    //                        foreach (string item in combo.Items)
    //                        {
    //                            XmlNode node = doc.CreateNode(XmlNodeType.Element, "Item", "");
    //                            node.InnerText = item;
    //                            element.AppendChild(node);
    //                        }
    //                        doc.Save(fileName);
    //                    }
    //                    catch(XmlException)
    //                    {
    //                    }
    //                    Settings.SetValue(Name, combo.Text);
    //                    break;
    //                case "ListView":
    //                    ListView list = (ListView)ctrl;
    //                    try
    //                    {
    //                        string fileName = null;
    //                        XmlDocument doc = null;
    //                        XmlNode element = GetCtrlNode(ctrl, ref fileName, ref doc);
    //                        element.RemoveAll();
    //                        foreach (ListViewItem viewItem in list.Items)
    //                        {
    //                            XmlNode node = doc.CreateNode(XmlNodeType.Element, "Item", "");
    //                            if(list.CheckBoxes == true)
    //                            {
    //                                XmlAttribute attribute = doc.CreateAttribute("Checked");
    //                                attribute.Value = viewItem.Checked.ToString();
    //                                node.Attributes.Append(attribute);
    //                            }
    //                            string InnerText = "";
    //                            foreach(ListViewItem.ListViewSubItem subItem in viewItem.SubItems)
    //                                InnerText += subItem.Text+'\t';
    //                            node.InnerText = InnerText.TrimEnd('\t');
    //                            element.AppendChild(node);
    //                        }
    //                        doc.Save(fileName);
    //                    }
    //                    catch(XmlException)
    //                    {
    //                    }
    //                    break;
    //            }
    //    }
		
    //    static XmlNode GetCtrlNode(Control ctrl)
    //    {
    //        string fileName = null;
    //        XmlDocument doc = null;
    //        return GetCtrlNode(ctrl, ref fileName, ref doc);
    //    }

    //    static XmlNode GetCtrlNode(Control ctrl, ref string fileName, ref XmlDocument doc)
    //    {
    //        fileName = Application.StartupPath+'\\'+(string)ctrl.Tag+".xml";
    //        doc = new XmlDocument();
    //        XmlNode node = null;
    //        string Name = ctrl.FindForm().Name+'-'+ctrl.Name;
    //        if(File.Exists(fileName))
    //        {
    //            doc.Load(fileName);
    //            node = doc.DocumentElement.SelectSingleNode(Name);
    //        }
    //        else
    //            doc.LoadXml("<Settings>\r\n</Settings>");
    //        if(node == null)
    //        {
    //            node = doc.CreateNode(XmlNodeType.Element, Name, "");
    //            doc.DocumentElement.AppendChild(node);
    //        }
    //        return node;
    //    }

    //    public static void GetValue(Form form)
    //    {
    //        Control ctrl = null;
    //        while((ctrl = form.GetNextControl(ctrl, true)) != null)
    //            Settings.GetValue(ctrl);
    //    }
    //    public static void GetValue(Control ctrl)
    //    {
    //        string Name = ctrl.FindForm().Name+'-'+ctrl.Name;
    //        if(ctrl.Tag != null && ctrl.Tag.ToString().Trim().Length > 0)
    //            switch(ctrl.GetType().Name)
    //            {
    //                case "TextBox":
    //                    ctrl.Text = Settings.GetValue((string)ctrl.Tag, ctrl.Text);
    //                    break;
    //                case "CheckBox":
    //                    CheckBox check = (CheckBox)ctrl;
    //                    check.Checked = Settings.GetValue((string)ctrl.Tag, check.Checked);
    //                    break;
    //                case "RadioButton":
    //                    RadioButton radio = (RadioButton)ctrl;
    //                    radio.Checked = Settings.GetValue((string)ctrl.Tag, radio.Checked);
    //                    break;
    //                case "NumericUpDown":
    //                    NumericUpDown numeric = (NumericUpDown)ctrl;
    //                    numeric.Value = decimal.Parse(Settings.GetValue((string)ctrl.Tag, numeric.Value.ToString()));
    //                    break;
    //                case "TabControl":
    //                    TabControl tab = (TabControl)ctrl;
    //                    tab.SelectedIndex = int.Parse(Settings.GetValue((string)ctrl.Tag, tab.SelectedIndex.ToString()));
    //                    break;
    //                case "ComboBox":
    //                    ComboBox combo = (ComboBox)ctrl;
    //                    try
    //                    {
    //                        XmlNode element = GetCtrlNode(ctrl);
    //                        if(element != null && element.ChildNodes.Count > 0)
    //                        {
    //                            combo.Items.Clear();
    //                            foreach(XmlNode node in element.ChildNodes)
    //                                combo.Items.Add(node.InnerText);
    //                        }
    //                    }
    //                    catch(XmlException)
    //                    {
    //                    }
    //                    combo.Text = Settings.GetValue(Name, combo.Text);
    //                    break;
    //                case "ListView":
    //                    ListView list = (ListView)ctrl;
    //                    try
    //                    {
    //                        XmlNode element = GetCtrlNode(ctrl);
    //                        if(element != null && element.ChildNodes.Count > 0)
    //                        {
    //                            list.Items.Clear();
    //                            foreach(XmlNode node in element.ChildNodes)
    //                            {
    //                                string[] items = node.InnerText.Split('\t');
    //                                ListViewItem viewItem = list.Items.Add(items[0]);
    //                                for(int nIndex = 1; nIndex < items.Length; nIndex++)
    //                                    viewItem.SubItems.Add(items[nIndex]);
    //                                if(list.CheckBoxes == true)
    //                                {
    //                                    XmlAttribute attribute  = node.Attributes["Checked"];
    //                                    if(attribute != null)
    //                                        viewItem.Checked = attribute.Value.ToLower() == "true";
    //                                }
    //                            }
    //                        }
    //                    }
    //                    catch(XmlException)
    //                    {
    //                    }
    //                    break;
    //            }
    //    }
    //}
}